home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / util / misc / FastFontList.lha / Source / FixFontList.a < prev   
Encoding:
Text File  |  1999-03-23  |  3.3 KB  |  201 lines

  1.  
  2. ;    INCLUDE MMacros
  3. ;    INCLUDE diskfont/diskfont.i
  4.  
  5. MAIN:
  6.    LEA BSS_START,A4              ;A4= ->BSS SECTION
  7.     MOVE.L 4,A6
  8.    MOVE.L D0,ARGLEN(A4)
  9. ;   MOVE.L A0,ARGPTR(A4)
  10.    MOVE.L A6,A5    ;A5=EXEC
  11.    CLEARA A1
  12.    CALL FindTask
  13.    MOVE.L D0,A3      ;A3=PTR TO OUR PROCESS
  14. ;   MOVE.L pr_CurrentDir(A3),D2   ;D2=LOCK FOR CURRENTDIR FROM CLI
  15.    TST.L pr_CLI(A3)
  16.    BNE.S DOLIBS
  17. FROMWB:
  18.    LEA pr_MsgPort(A3),A0
  19.    CALL WaitPort
  20.    LEA pr_MsgPort(A3),A0
  21.    CALL GetMsg
  22.    MOVE.L D0,ARGPTR(A4)
  23.    CLR.L ARGLEN(A4)
  24. ;   MOVE.L D0,A0
  25. ;   MOVE.L sm_ArgList(A0),A1
  26. ;   MOVE.L wa_Lock(A1),D2       ;D2=LOCK FOR CURRENTDIR FROM WB
  27. DOLIBS:
  28.    MOVEQ #0,D0
  29.    LEA DOS(PC),A1
  30.    CALL OpenLibrary
  31.    MOVE.L D0,DOSBASE(A4)
  32.    BEQ NODOS
  33.  
  34.    MOVE.L D0,A6
  35.    LEA FILENAME(PC),A1
  36.    MOVE.L A1,D1
  37.    CALL DeleteFile
  38.  
  39.    MOVE.L A5,A6
  40.    MOVEQ #0,D0
  41.    LEA FONT(PC),A1
  42.    CALL OpenLibrary
  43.    MOVE.L D0,FONTBASE(A4)
  44.    BEQ NOFONT
  45.  
  46.    MOVE.L D0,A6
  47.    MOVEQ #AFF_DISK,D1
  48.    MOVEQ #0,D0
  49.    LEA ERRORNUM(A4),A0
  50.    CALL AvailFonts
  51.    MOVE.L D0,D6
  52.    BEQ NOFONTS
  53.  
  54.    MOVE.L A5,A6
  55.    MOVEQ #0,D1
  56.    ADDQ.L #4,D0
  57.    CALL AllocMem
  58.    MOVE.L D0,D7
  59.    BEQ NOMEM
  60.    ADDQ.L #4,D7
  61.  
  62.    MOVE.L FONTBASE(A4),A6
  63.    MOVEQ #AFF_DISK,D1
  64.    MOVE.L D6,D0
  65.    MOVE.L D7,A0
  66.    CALL AvailFonts
  67.    TST.L D0
  68.    BNE.S NOCANGROW
  69.  
  70.    MOVE.L D7,A3
  71.    ADD.L D6,A3
  72.  
  73.    MOVE.L D7,A2
  74.    MOVE.W (A2)+,D1      ;NUMBER OF AvailFonts
  75.    BRA.S SKIP
  76. LOOP:
  77.    ADDQ.L #af_Attr+ta_Name,A2
  78.    MOVE.L (A2)+,D0
  79.    CMP.L A3,D0
  80.    BGE.S NOTBIGGER
  81.    MOVE.L D0,A3
  82. NOTBIGGER:
  83.    ADDQ.L #ta_SIZEOF-ta_YSize,A2
  84. SKIP:
  85.    DBRA.S D1,LOOP
  86.  
  87.    MOVE.L D7,A0
  88.    MOVE.L A3,D0
  89.    MOVE.L D6,D1
  90.  
  91.    SUB.L A2,D0
  92.  
  93.    SUB.L D0,D1
  94.    MOVE.L D1,-(A0)
  95.  
  96.    ADD.L D7,D0
  97.  
  98.    MOVE.L D7,A1
  99.    MOVE.W (A1)+,D1
  100.    BRA.S SKIP2
  101. LOOP2:
  102.    ADDQ.L #af_Attr+ta_Name,A1
  103.    SUB.L D0,(A1)+
  104.    ADDQ.L #ta_SIZEOF-ta_YSize,A1
  105. SKIP2:
  106.    DBRA.S D1,LOOP2
  107.  
  108.    MOVE.L DOSBASE(A4),A6
  109.    LEA FILENAME(PC),A1
  110.    MOVE.L A1,D1
  111.    MOVE.L #MODE_NEWFILE,D2
  112.    CALL Open
  113.    MOVE.L D0,D5
  114.    BEQ.S NOFILE
  115.  
  116.    MOVE.L D5,D1        ;FILE PTR
  117.    MOVE.L D7,D2
  118.    SUBQ.L #4,D2        ;ADDRESS
  119.    MOVE.L A2,D3
  120.    SUB.L D2,D3         ;BYTES TO WRITE
  121.    CALL Write
  122.    CMP.W D3,D0
  123.    BNE.S BADWRITE
  124.  
  125.    MOVE.L D5,D1        ;FILE PTR
  126.    MOVE.L A3,D2        ;ADDRESS
  127.  
  128.    SUB.L D7,A3
  129.    MOVE.L D6,D3
  130.    SUB.L A3,D3         ;BYTES TO WRITE
  131.    CALL Write
  132.    CMP.L D3,D0
  133.    BNE.S BADWRITE
  134. CLOSEFILE:
  135.    MOVE.L D5,D1
  136.    CALL Close
  137.  
  138. NOFILE:
  139. NOCANGROW:
  140.    MOVE.L A5,A6
  141.    MOVE.L D6,D0
  142.    ADDQ.L #4,D0
  143.    MOVE.L D7,A1
  144.    SUB.L #4,A1
  145.    CALL FreeMem
  146. NOMEM:
  147.    MOVE.L FONTBASE(A4),A1
  148.    CALL CloseLibrary
  149. NOFONT:
  150.    MOVE.L DOSBASE(A4),A1
  151.    CALL CloseLibrary
  152. NODOS:
  153.    TST.L ARGLEN(A4)
  154.    BNE.S NOWB
  155.    CALL Forbid
  156.    MOVE.L ARGPTR(A4),A1      ;A1= ->WBSTARTUP MESSAGE
  157.    CALL ReplyMsg
  158. NOWB:
  159.    MOVE.L ERRORNUM(A4),D0
  160.    RTS
  161.  
  162. BADWRITE:
  163.    MOVE.L D5,D1
  164.    CALL Close
  165.    LEA FILENAME(PC),A1
  166.    MOVE.L A1,D1
  167.    CALL DeleteFile
  168.    MOVE.W #20,ERRORNUM+2(A4)
  169.    BRA.S NOFILE
  170.  
  171. NOFONTS:
  172.    MOVE.W #10,ERRORNUM+2(A4)
  173.    MOVE.L A5,A6
  174.    BRA.S NOMEM
  175.  
  176.          CNOP 0,4
  177. FILENAME:
  178.    DC.B 'FONTS:_FontList',0
  179.          CNOP 0,4
  180. DOS:
  181.    DC.B 'dos.library',0
  182.          CNOP 0,4
  183. FONT:
  184.    DC.B 'diskfont.library',0
  185. VERSION:
  186.    DC.B '$VER: FixFontList 1.1 (23.03.99)',0
  187.  
  188.  
  189.             SECTION Bss,BSS
  190. BSS_START:  ;(A4)
  191. ARGLEN:
  192.    DS.L 1
  193. ARGPTR:
  194.    DS.L 1
  195. DOSBASE:
  196.    DS.L 1
  197. FONTBASE:
  198.    DS.L 1
  199. ERRORNUM:
  200.    DS.L 1
  201.